package com.ai.core.util;
 

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 用于管理及方便读取基础配置的工具类。
 */
public abstract class Configure {
	private static final String PROPERTIES_PATH = "config.properties";
	private static final Log logger = LogFactory.getLog(Configure.class);

	private static ConfigureStore store;

	static {
		// disable ehcache's update check
		System.setProperty("net.sf.ehcache.skipUpdateCheck", "true");

		Properties properties = new Properties();
		store = new MapConfigureStore(properties);

		InputStream in = Configure.class.getClassLoader().getResourceAsStream(
				PROPERTIES_PATH);
		if (in == null) {
			throw new IllegalArgumentException("Can not found resource \""
					+ PROPERTIES_PATH + "\"!");
		}

		try {
			properties.load(in);
		} catch (IOException e) {
			logger.error(e, e);
		}
	}

	public void addListener(ConfigureListener listener) {
		getStore().addListener(listener);
	}

	public void removeListener(ConfigureListener listener) {
		getStore().removeListener(listener);
	}

	/**
	 * 返回内部用于存贮配置信息的对象。
	 */
	public static ConfigureStore getStore() {
		return store;
	}

	/**
	 * 以String形式返回某配置项的值。
	 * 
	 * @param key
	 *            配置项的名称
	 */
	public static String getString(String key) {
		return store.getString(key);
	}

	/**
	 * 以String形式返回某配置项的值，如果该配置项不存在则返回给定的默认值。
	 * 
	 * @param key
	 *            配置项的名称
	 * @param defaultValue
	 *            默认值
	 */
	public static String getString(String key, String defaultValue) {
		return store.getString(key, defaultValue);
	}

	/**
	 * 以boolean形式返回某配置项的值。
	 * 
	 * @param key
	 *            配置项的名称
	 */
	public static boolean getBoolean(String key) {
		return store.getBoolean(key);
	}

	/**
	 * 以boolean形式返回某配置项的值，如果该配置项不存在则返回给定的默认值。
	 * 
	 * @param key
	 *            配置项的名称
	 * @param defaultValue
	 *            默认值
	 */
	public static boolean getBoolean(String key, boolean defaultValue) {
		return store.getBoolean(key, defaultValue);
	}

	/**
	 * 以long形式返回某配置项的值。
	 * 
	 * @param key
	 *            配置项的名称
	 */
	public static long getLong(String key) {
		return store.getLong(key);
	}

	/**
	 * 以long形式返回某配置项的值，如果该配置项不存在则返回给定的默认值。
	 * 
	 * @param key
	 *            配置项的名称
	 * @param defaultValue
	 *            默认值
	 */
	public static long getLong(String key, long defaultValue) {
		return store.getLong(key, defaultValue);
	}
	
	public static String getAppId(){
		return getString("appId");
	}
	
	public static String getToken(){
		return getString("token");
	}
	
	public static String getAppsecret(){
		return getString("appsecret");
	}

	public static String getPartner(){
		return getString("partner");
	}
	public static String getPartnerKey(){
		return getString("partnerKey");
	}
 
	public static String getNotifyUrl(){
		return getString("notify_url");
	}

	public static boolean isTest(){
		return getBoolean("is_test");
	}

	public static String getTestOpenId(){
		return getString("test_openid");
	}
	
}
